import numpy as np
from math import exp, sqrt, log
from scipy.stats import norm


def option_pricer(call_or_put, spot, strike, maturity, r, vol):
    """
    参数：
        call_or_put： 1 看涨期权价格， 0 看跌期权价格
        spot： 标的资产价格
        strike： 执行价格
        maturity： 到期时间（年化）
        vol： 波动率
    返回：
        相应期权价格
    """
    d1 = (log(spot / strike) + (r + 0.5*vol*vol)* maturity)/vol/sqrt(maturity)

    d2 = d1 - vol * sqrt(maturity)

    if call_or_put == 1:
        call_price = spot * norm.cdf(d1) - strike * exp(-r*maturity) * norm.cdf(d2)

        return call_price
    elif call_or_put == 0:
        put_price = strike * exp(-r * maturity) * norm.cdf(-d2) - spot * norm.cdf(-d1)
        return put_price